package com.emm.yixun.mobile.application;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.Application;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.media.AudioManager;
import android.os.Environment;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
import android.view.Gravity;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;

import com.alibaba.fastjson.JSONObject;
import com.emm.yixun.mobile.R;
import com.emm.yixun.mobile.model.GetCalculatePrice;
import com.emm.yixun.mobile.model.GetCustomerDetail;
import com.emm.yixun.mobile.model.GetDictionaryList.RqBusNumList;
import com.emm.yixun.mobile.model.GetHouseTypeList.HouseTypeList;
import com.emm.yixun.mobile.model.GetPayDepositDetail;
import com.emm.yixun.mobile.model.GetPremisesList.PremisesList;
import com.emm.yixun.mobile.model.GetRoomList.RoomList;
import com.emm.yixun.mobile.model.GetSignedDetail;
import com.emm.yixun.mobile.model.GetSubscribeDetail;
import com.emm.yixun.mobile.model.GetSubscribeDetail.dealCategoryList;
import com.emm.yixun.mobile.ui.powertochoose.SelectPhoneActivity;
import com.emm.yixun.utils.CommonUtils;
import com.eroad.product.tools.BitmapDegreeTools;
import com.eroad.product.tools.Installation;
import com.eroad.product.tools.ToastView;
import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nui.multiphotopicker.model.ImageItem;
import com.umeng.analytics.MobclickAgent;
import com.umeng.analytics.MobclickAgent.EScenarioType;
import com.umeng.analytics.MobclickAgent.UMAnalyticsConfig;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import xf.tools.ACache;
import xf.tools.CustomToast;
import xf.tools.popu.City_provinceCityDistrict;

@SuppressLint("NewApi")
public class EmmApplication extends Application {

    public static String MD5 = "YUplf0wyU5vPVssLSG";

    /**
     * 友盟的app id
     */
    public static String UMENGAPPID = "5763a6dfe0f55a8b4f001c8c";

    /**
     * QQ APP ID
     */
    public static String QQAPPID = "1105406003";

    /**
     * QQ APP KEY
     */
    public static String QQAPPKEY = "EBdeGIttSSzRjLQV";

    /**
     * WX APP ID
     */
    public static String WXAPPID = "wx95cdf0ced074cf36";

    /**
     * WX AppSecret
     */
    public static String WXAppSecret = "1e27c05ef6a735a03d5aceb5c561068c";

    /**
     * 是否编辑type
     */
    public static int IsReload = 1;

    /**
     * 商户默认编码
     */
    public static String merchantCode = "me10001";

    /**
     * 商户ID
     */
    public static String merchantId = "merchantId";

    /**
     * 项目Code
     */
    public static String ProjectCode = "ProjectCode";

    /**
     * 项目ID
     */
    public static String Project_ID = "Project_ID";

    /**
     * 登录号
     */
    public static String Project_LoginCode = "Project_LoginCode";

    /**
     * 退出标识
     */
    public static String logout = "logout";

    /**
     * 刷新
     */
    public static String newdown = "newdown";

    /**
     * 项目图标
     */
    public static String FistSrcPatch = "FistSrcPatch";

    /**
     * 拼接链接
     */
    public static String urlStr;

    /**
     * 图片数量上限
     */
    public static int SelectNumber = 9;

    /** 链接头 */
    // public static String urlString =
    // "http://192.168.30.30/emm-openapi/appapi/";

    /**
     * 测试 内网
     */
//    public static String urlString = "http://192.168.16.187:8086/emm-openapi/appapi/";
//    public static String urlString = "http://192.168.8.212:8888/emm-openapi/appapi/";
//    public static String urlString = "http://222.73.105.217:28086/emm-openapi/appapi/";
//    public static String urlString = "http://172.16.34.181:8888/emm-openapi/appapi/";

    /**
     * 生产
     */
    public static String urlString = "http://m2.openapi.qiaofangyun.com/emm-openapi/appapi/";

    //UAT
//    public static String urlString = "http://m2.openapi.uat.qiaofangyun.com/emm-openapi/appapi/";

    /**
     * 是否更新
     */
    public static boolean IsUpdate = true;

    /**
     * 是否可下载
     */
    public static boolean isDownLoadApk = true;

    /**
     * APK下载链接
     */
    public static String DownLoadingUrl = "http://m2img.qiaofangyun.com/upload/Android/emm.apk";

    /**
     * 做初始化对象
     */
    private static EmmApplication instance;

    /**
     * 重新登录累计数，防止重复打开登录界面
     */
    public static int count = 0;

    // uri_byte(选择图片并截取)获取之后，直接上传

    private static final String TAG = "EmmApplication";

    /**
     * action
     */
    public static String Success_finish = "Success";

    /**
     * 上下文对象
     */
    public static Context context;

    /**
     * 图片工具初始化
     */
    public static ImageLoader imageLoader = ImageLoader.getInstance();

    /**
     * 图片工具配置
     */
    public static DisplayImageOptions options;

    // 加载本地图片方法 1、调用 image（）；方法配置options。
    // 然后：显示imageLoader.displayImage("file://" + photo_path, imageview,options);

    /**
     * 默认选中需要缓存的图片路径
     */
    public static String Image_uri = "";

    /**
     * 项目列表错误码
     */
    public static String ErrorCode = "10010";

    /**
     * 录音上传路径
     */
    public static String UpLoadingUrl = "";

    /**
     * 缓存架构
     */
    public static ACache aCache;

    /**
     * 缓存时间
     */
    public static int AcacheTime = 3650;

    /**
     * 客户详情
     */
    public static GetCustomerDetail details = new GetCustomerDetail();

    /**
     * 认筹详情
     */
    public static GetPayDepositDetail getpaydepositdetail;

    /**
     * 认购详情
     */
    public static GetSubscribeDetail getsubscribe;

    /**
     * 签约详情
     */
    public static GetSignedDetail getsigned;

    /**
     * SharedPreferences key
     */
    public static final String IsloockName = "loocktype";

    /**
     * Crash name 0 存在过，需要刷新 1 不存在，不需要刷新
     */
    public static final String CRASH = "CRASH";

    /**
     * 是否开通电话平台
     */
    public static final String ISPHONEINFORMATION = "isPhoneInformation";

    /**
     * 登陆标识name
     */
    public static final String PWDSTR = "islogin";

    /**
     * 项目列表是否为空 1是 0否
     */
    public static final String PROJECT_LIST_ISNULL = "project_list_isnull";

    /**
     * 用户名称
     */
    public static final String UserName = "USERNAME";

    /**
     * 登陆标识
     */
    public static final String LoginToken = "LoginToken";

    /**
     * 认筹 (是否拥有权限 0、未开通；1、已开通)
     */
    public static final String FROMDETAILSTYPE = "FormDetailsType";

    /**
     * 菜单权限：首页 String(1) 首页：0 无 1 有
     */
    public static final String isHomePage = "isHomePage";

    /**
     * 菜单权限：客户 String(1) 客户：0 无 1 有
     */
    public static final String isCustomer = "isCustomer";

    /**
     * 菜单权限：房源 String(1) 房源：0 无 1 有
     */
    public static final String isHouses = "isHouses";

    /**
     * 菜单权限：分析 String(1) 分析：0 无 1 有
     */
    public static final String isAnalysis = "isAnalysis";

    /**
     * 菜单权限：我的 String(1) 我的：0 无 1 有
     */
    public static final String isMine = "isMine";

    /**
     * 客户菜单权限下按钮权限：客户新增 String(1) 客户新增：0 无 1 有
     */
    public static final String isAddCustomer = "isAddCustomer";

    /**
     * 客户菜单权限下按钮权限：客户分配 String(1) 客户分配：0无 1 有
     */
    public static final String isDistributionCustomer = "isDistributionCustomer";

    /**
     * 我的菜单权限下按钮权限：我的成绩 String(1) 我的成绩：0 无 1 有
     */
    public static final String isGradesMine = "isGradesMine";

    /**
     * 我的菜单权限下按钮权限：个人英雄榜 String(1) 个人英雄榜：0 无 1 有
     */
    public static final String isHeroListMine = "isHeroListMine";

    /**
     * 我的菜单权限下按钮权限：团队排名 String(1) 团队排名：0 无 1 有
     */
    public static final String isTeamRankingMine = "isTeamRankingMine";

    /**
     * 新增认筹权限：0 无 1 有
     */
    public static final String isAddPaydeposit = "isAddPaydeposit";

    /**
     * 新增签约：0 无 1 有
     */
    public static final String isAddSigned = "isAddSigned";

    /**
     * 新增认购：0 无 1 有
     */
    public static final String isAddSubscribe = "isAddSubscribe";

    /**
     * userId
     */
    public static final String USERID = "USERID";

    /**
     * 首页是否刷新
     */
    public static boolean IsReloadMain = false;

    /**
     * 是否刷新项目列表
     */
    public static boolean IsReloadProject = false;

    /**
     * Toast展示实现
     */
    public static final int ToastTime = 1000;

    /**
     * 省市区ID
     */
    public static String provinceId, cityId, areaId;

    /**
     * 地址拼凑ID
     */
    public static String areaIds;

    /**
     * 文件根路径
     */
    public static String DatePatch = "";

    /**
     * 算价结果
     */
    public static GetCalculatePrice getcalculate;

    /**
     * 省市区集合
     */
    public static ArrayList<City_provinceCityDistrict.ProvinceCityDistrict> city_provinceCityDistricts;

    /**
     * 文件路径
     */
    private static String path;

    /**
     * 文件路径
     */
    private static File dir;

    /**
     * 图片缩放比例
     */
    public static int BitmapSize = 500;

    /**
     * 相册返回的bitmap
     */
    public static Bitmap bitmap = null;

    /**
     * 月份
     */
    public static int Month = 0;

    /**
     * 关注户型选择
     */
    public static String AttentionDate = "";

    /**
     * 意向组团选择
     */
    public static String GroupDate = "";

    /**
     * 当前项目名 key
     */
    public static String ProjectName = "ProjectName";

    /**
     * 当前项目名 key -
     */
    public static String ProjectName_content = "ProjectName_content";

    /**
     * 当前项目ID key
     */
    public static String ProjectID = "ProjectID";

    /**
     * 新增客户详情本地缓存key
     */
    public static String NEWCUSTOMERDATE = "NEWCUSTOMERDATE";

    /**
     * 关注户型列表
     */
    public static ArrayList<HouseTypeList> attentionlist = new ArrayList<HouseTypeList>();

    /**
     * 关注重点
     */
    public static ArrayList<RqBusNumList> RqFocus = new ArrayList<RqBusNumList>();

    /**
     * 意向组团
     */
    public static ArrayList<PremisesList> grouplist = new ArrayList<PremisesList>();

    /**
     * 意向房源
     */
    public static ArrayList<RoomList> housinglist = new ArrayList<RoomList>();

    /**
     * 认购经纪人
     */
    public static ArrayList<dealCategoryList> dealCategoryList = new ArrayList<GetSubscribeDetail.dealCategoryList>();

    /**
     * 生活服务
     */
    public static ArrayList<RqBusNumList> LifeService = new ArrayList<RqBusNumList>();

    /**
     * 生活配套
     */
    public static ArrayList<RqBusNumList> SupportingLife = new ArrayList<RqBusNumList>();

    /**
     * 乐于参加的活动类型
     */
    public static ArrayList<RqBusNumList> ATypeOfActivityThatIsWillingToParticipate = new ArrayList<RqBusNumList>();

    /**
     * 兴趣爱好
     */
    public static ArrayList<RqBusNumList> HobbyList = new ArrayList<RqBusNumList>();

    /**
     * 日常信息获知途径
     */
    public static ArrayList<RqBusNumList> DailyInformationLearningApproach = new ArrayList<RqBusNumList>();

    public static Map<String, Object> maps = new HashMap<>();

    /**
     * 是否房源选择
     */
    public static boolean IsNewSelect = false;

    /**
     * 初始化对象,用于存储选中的房源
     */
    public static RoomList room = new RoomList();

    /**
     * 是否多选
     */
    public static boolean IsMoreSelect = false;

    /**
     * 是否重新选择
     */
    public static boolean IsCreate = false;

    /**
     * 多选图片列表
     */
    public static List<ImageItem> pir = new ArrayList<ImageItem>();

    /**
     * 通知跟进界面准备发送图片的action
     */
    public static String SendBroadcastContent = "SendBroadcastContent";

    /**
     * 需要播放的录音文件路径
     */
    public static File OpenPath;

    /**
     * 是否刷新审核界面
     */
    public static boolean IsReloadToExamine = false;

    /**
     * 是否在加载客户详情 false 否 true 是 (作用：限制在加载客户详情界面时重复启动该界面)
     */
    public static boolean IsLoadingCustomer = false;

    /**
     * 是否在从认筹、认购、签约列表打开新的界面 false 否 true 是
     */
    public static boolean IsLoadingFromList = false;

    /**
     * 客户列表刷新
     */
    public static String CustomerReload = "CustomerReload";

    /**
     * 告知播放录音 (跟进)
     */
    public static String SendOpenVideo = "SENDOPENVIDEO";

    /**
     * 刷新项目界面
     */
    public static String MAIN_ON_RESUME_TOBE = "MAIN_ON_RESUME_TOBE";

    /**
     * 告知播放录音(详情)
     */
    public static String SendOpenVideo2 = "SENDOPENVIDEO2";

    /**
     * 刷新认筹详情界面action
     */
    public static String NEW_ON_CREATE_FROM = "NEW_ON_CREATE_FROM";

    /**
     * 刷新认筹详情界面action
     */
    public static String FROM_LIST_DETAILS_FI_NI_ACTIVITY = "FROM_LIST_DETAILS_FI_NI_ACTIVITY";

    /**
     * 关闭认购界面action
     */
    public static String SUB_SC_RI_DETAILS_FI_NI_ACTIVITY = "SUB_SC_RI_DETAILS_FI_NI_ACTIVITY";

    /**
     * 关闭签约界面action
     */
    public static String SIGNED_FI_NI_ACTIVITY = "SIGNED_FI_NI_ACTIVITY";

    /**
     * 刷新认筹详情界面action
     */
    public static String NEW_ON_CREATE_FROM_LIST = "NEW_ON_CREATE_FROM_LIST";

    /**
     * 刷新认购详情界面action
     */
    public static String NEW_ON_CS_UB_SC_RI_DETAILS = "NEW_ON_CS_UB_SC_RI_DETAILS";

    /**
     * 刷新签约详情界面action
     */
    public static String ON_CREATE_SIGNED_ACTIVITY = "ONCREATESIGNEDACTIVITY1111";

    /**
     * 刷新客户详情action
     */
    public static String NEW_CUSTOMER_DETAILS = "NEW_CUSTOMER_DETAILS";

    /**
     * 刷新房源详情
     */
    public static String NEWHousing = "NEWHousing";

    /**
     * 刷新客户
     */
    public static String NEW_CUSTOMER_DETAILS_LIST = "NEW_CUSTOMER_DETAILS_LIST";

    /**
     * 客户列表是否刷新
     */
    public static boolean IS_RELOAD = false;

    public static boolean IS_FINISH_DETAILS = false;

    /**
     * 客户是否刷新
     */
    public static boolean IS_RELOAD_DETAILS = true;

    /**
     * 运营分析是否刷新
     */
    public static boolean IS_RELOAD_ANALYSIS = false;

    /**
     * 最大音量
     */
    public static int max;

    /**
     * 当前音量
     */
    public static int current;

    /**
     * 选中的下标
     */
    public static int Select_position;

    /**
     * 是否需要得到当前一个房号信息
     */
    public static boolean IsGet = false;

    /**
     * 文件缓存名
     */
    public static String CACHE_NAME = "CACHE_NAME";

    /**
     * 音频管理器
     */
    public static AudioManager mAudioManager;

    /**
     * APK版本号
     */
    public static int versionCode;

    /**
     * deviceID
     */
    public static String deviceId;

    /**
     * Android系统版本号
     */
    public static String currentapiVersion;

    /**
     * 安装时间
     */
    public static String install_time;

    /**
     * 拼接字段
     */
    public static String Equipment_number;

    /**
     * APK版本名
     */
    public static String versionName;

    /**
     * 时间选择直到月份编码
     */
    public static int monthCode = 100371;

    @Override
    public void onCreate() {
        Log.d(TAG, "程序创建的时候执行:====>EmmApplication:------>onCreate");
        super.onCreate();

        context = getApplicationContext();
        CommonUtils.sContext = context;

        initImageLoader(getApplicationContext());// 初始化imageLoader(图形加载工具)

        aCache = ACache.get(this);// 实例化缓存组件

        DatePatch = getDatePatch(); // 获取文件根路径
        DatePatch = getFilePath(DatePatch, "xf").getPath();

        // 初始化音频管理器
        mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

        // 友盟初始化
        MobclickAgent.startWithConfigure(new UMAnalyticsConfig(context, "5832c3f507fe6502960000a7", "a00",
                EScenarioType.E_UM_NORMAL, true));
        MobclickAgent.setDebugMode(true);

        // 初始化省市区缺失数据
        getDate();
        getDate2();
    }

    /**
     * <p>
     * <b>Title：</b> 链接拼接方法
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param method
     * @author tangxin
     * @date 2016年12月13日 下午6:35:46
     */
    public static void updateUrl(String method) {
        urlStr = urlString + method;
    }

    /**
     * <p>
     * <b>Title：</b> 媒体 最大音量 和当前音量
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @author tangxin
     * @date 2016年12月13日 下午6:35:34
     */
    public static void getVideo() {
        max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        current = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        System.out.println("max : " + max + " current :" + current);
    }

    /**
     * <p>
     * <b>Title：</b>设置音量
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param number
     * @author tangxin
     * @date 2016年12月13日 下午6:35:09
     */
    public static void setVideo(int number) {
        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, number, 0);
    }

    /**
     * <p>
     * <b>Title：</b> 初始化instance
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:35:18
     */
    public static EmmApplication getInstance() {
        if (instance == null) {
            instance = new EmmApplication();
        }
        return instance;
    }

    /**
     * <p>
     * <b>Title：</b> 缓存方法
     * </p>
     * <p>
     * <b>Description：</b>若是已存在，就删除旧的缓存数据，保存新的
     * </p>
     *
     * @param JsonName
     * @param jo
     * @author tangxin
     * @date 2016年12月13日 下午6:36:38
     */
    public static void setJsonArray(String JsonName, String jo) {
        try {
            aCache.remove(JsonName);
        } catch (NullPointerException e) {
            Log.w(TAG, e.hashCode() + "<------/AcaChe NullPointerException/------Message->" + e.getMessage());
        }
        Log.v(TAG, "存入数据：=>" + jo);
        aCache.put(JsonName, jo, AcacheTime * ACache.TIME_DAY);
    }

    /**
     * <p>
     * <b>Title：</b> 缓存清理检测
     * </p>
     * <p>
     * <b>Description：</b>获取缓存存在时间 , 超过两天则清理一次
     * </p>
     *
     * @author tangxin
     * @date 2016年12月13日 下午6:37:05
     */
    public static void getCache() {
        String str = getData(CACHE_NAME);
        if (null == str || "".equals(str) || "null".equals(str)) {// 为空，说明没有存在缓存
            setData(CACHE_NAME, dataTime(geTime(), "yyyy-MM-dd HH:mm:ss"));// 添加时间标记
            Log.v(TAG, "目前没有缓存历史，添加时间标记，上次缓存起始时间：" + str);
        } else {// 不为空，校验时间是否超过两天
            int day = getDayHourTime(str, dataTime(geTime(), "yyyy-MM-dd HH:mm:ss"), 1);
            int h = getDayHourTime(str, dataTime(geTime(), "yyyy-MM-dd HH:mm:ss"), 2);
            if (((day * 24) + h) < 48) {// 小于48小时,不做处理
                Log.v(TAG, "缓存时间小于48小时，不做清档处理，上次缓存起始时间：" + str);
            } else {
                Log.v(TAG, "缓存时间大于48小时，需要做清档处理，上次缓存起始时间：" + str);
                String p1 = Environment.getExternalStorageDirectory() + "/xinfang";// 录音缓存文件夹、图片缓存文件夹
                String p2 = Environment.getExternalStorageDirectory() + "/xinfangxf";// 下载录音文件夹、图片下载文件夹
                String p3 = DatePatch;// 当前app除使用aCache外的所有缓存路径
                Log.v(TAG, "整理完成所有文件夹");
                Log.v(TAG, "p1:" + p1);
                Log.v(TAG, "p2:" + p2);
                Log.v(TAG, "p3:" + p3);
                Log.v(TAG, "执行清理操作");
                Log.v(TAG, "正在清理p1:" + p1);
                deleteFile(new File(p1));// 清空处理
                Log.v(TAG, "p1清理完成");
                Log.v(TAG, "正在清理p2:" + p2);
                deleteFile(new File(p2));
                Log.v(TAG, "p2清理完成");
                Log.v(TAG, "正在清理p3:" + p3);
                deleteFile(new File(p3));
                Log.v(TAG, "p3清理完成");
                Log.v(TAG, "继续重复标记添加，作为下次判断依据");
                setData(CACHE_NAME, dataTime(geTime(), "yyyy-MM-dd HH:mm:ss"));// 添加时间标记
            }
        }
    }

    /**
     * <p>
     * <b>Title：</b> 两个时间相差
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str1 时间参数 1 格式：1990-01-01 12:00:00
     * @param str2 时间参数 2 格式：2009-01-01 12:00:00
     * @param type 1day 2h
     * @return 返回值为：xx天xx小时
     * @author tangxin
     * @date 2016年12月13日 下午6:37:45
     */
    public static int getDayHourTime(String str1, String str2, int type) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date one;
        Date two;
        long day = 0;
        long hour = 0;
        try {
            one = df.parse(str1);
            two = df.parse(str2);
            long time1 = one.getTime();
            long time2 = two.getTime();
            long diff;
            if (time1 < time2) {
                diff = time2 - time1;
            } else {
                diff = time1 - time2;
            }
            day = diff / (24 * 60 * 60 * 1000);
            hour = (diff / (60 * 60 * 1000) - day * 24);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        int strAnswer;
        if (type == 1) {
            strAnswer = (int) day;
        } else {
            strAnswer = (int) hour;
        }
        return strAnswer;
    }

    /**
     * <p>
     * <b>Title：</b> dp转px
     * </p>
     * <p>
     * <b>Description：</b>根据手机的分辨率从 dp 的单位 转成为 px(像素)
     * </p>
     *
     * @param dpValue
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:38:24
     */
    public static int dip2px(float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    public static float dip2pxf(float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (dpValue * scale + 0.5f);
    }

    /**
     * <p>
     * <b>Title：</b> sp转px
     * </p>
     * <p>
     * <b>Description：</b> 将sp值转换为px值
     * </p>
     *
     * @param spValue
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:38:50
     */
    public static int sp2px(float spValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }

    @Override
    public void onTerminate() {
        Log.d(TAG, "程序终止的时候执行:====>EmmApplication:------>onTerminate");
        super.onTerminate();
    }

    @Override
    public void onLowMemory() {
        Log.d(TAG, "低内存的时候执行:====>EmmApplication:------>onLowMemory");
        super.onLowMemory();
    }

    @Override
    public void onTrimMemory(int level) {
        Log.d(TAG, "程序在内存清理的时候执行:====>EmmApplication:------>onTrimMemory:___>level:>" + level);
        super.onTrimMemory(level);
    }

    /**
     * <p>
     * <b>Title：</b> 配置imageloader参数方法
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param context
     * @author tangxin
     * @date 2016年12月13日 下午6:39:33
     */
    public static void initImageLoader(Context context) {
        DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder().cacheInMemory(true)
                .imageScaleType(ImageScaleType.EXACTLY).cacheOnDisc(true).bitmapConfig(Config.RGB_565).build();
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .threadPriority(Thread.NORM_PRIORITY - 2).threadPoolSize(3).memoryCacheSize((int) (2 * 1024 * 1024))
                .memoryCacheSizePercentage(13).denyCacheImageMultipleSizesInMemory()
                .discCacheFileNameGenerator(new Md5FileNameGenerator())
                .discCache(new LimitedAgeDiscCache(new File("/NewDB/Cache"), 24 * 60 * 60))
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                // 设置加载显示图片队列进程
                .defaultDisplayImageOptions(defaultOptions).writeDebugLogs().build();
        ImageLoader.getInstance().init(config);
    }

    /**
     * <p>
     * <b>Title：</b> 项目列表错误码校验
     * </p>
     * <p>
     * <b>Description：</b>当前项目列表下的错误错误码 false则不可调用
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:39:50
     */
    public static boolean isErrorCode() {
        if ("31010".equals(ErrorCode)) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * <p>
     * <b>Title：</b> 身份证号码长度校验
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:40:09
     */
    public static boolean isTrueCode(String str) {
        if (str.length() == 15 || str.length() == 18) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * <p>
     * <b>Title：</b> toast气泡
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param message
     * @author tangxin
     * @date 2016年12月13日 下午6:40:16
     */
    public static void showTips(String message) {
        ToastView toast = new ToastView(context, message);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
    }

    /**
     * <p>
     * <b>Title：</b> 文件删除
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param file
     * @author tangxin
     * @date 2016年12月13日 下午6:40:30
     */
    public static void deleteFile(File file) {
        if (isSdk()) {
            if (file.exists()) {
                if (file.isFile()) {
                    file.delete();
                }
                // 如果它是一个目录
                else if (file.isDirectory()) {
                    // 声明目录下所有的文件 files[];
                    File files[] = file.listFiles();
                    for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件
                        deleteFile(files[i]); // 把每个文件 用这个方法进行迭代
                    }
                }
                file.delete();
            }
        } else {
            showTips("SD卡不可用");
        }
    }

    /**
     * <p>
     * <b>Title：</b> 判String断是否为空
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str 需要校验的字段
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:40:46
     */
    public static boolean isNull(String str) {
        if (null == str || "".equals(str) || TextUtils.isEmpty(str) || "null".equals(str)) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * <p>
     * Title:
     * </p>
     * 字符串半角转全角
     * <p>
     * Description: 2017年1月6日14:45:31 tangxin
     * 修改：非空检验统一操作，不用每一次都在方法外加判断(解决客户详情闪退问题)
     * </p>
     *
     * @param input
     * @return
     * @author zhaofei
     * @date 2017年1月4日 上午11:07:16
     */
    public static String toDBC(String input) {
        if (isNull(input)) {// 非空校验
            char[] c = input.toCharArray();
            for (int i = 0; i < c.length; i++) {
                if (c[i] == 12288) {
                    c[i] = (char) 32;
                    continue;
                }
                if (c[i] > 65280 && c[i] < 65375)
                    c[i] = (char) (c[i] - 65248);
            }
            return new String(c);
        } else {
            return "";
        }
    }

    /**
     * <p>
     * <b>Title：</b> 配置 options 参数方法
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param i 默认图片 ID
     * @author tangxin
     * @date 2016年12月13日 下午6:41:09
     */
    public static void image(int i) {
        options = new DisplayImageOptions.Builder().showStubImage(i).showImageForEmptyUri(i).showImageOnFail(i)
                .cacheInMemory(true).cacheOnDisc(true).imageScaleType(ImageScaleType.EXACTLY)
                .bitmapConfig(Bitmap.Config.ARGB_8888).build();// ARGB_8888
    }

    /**
     * <p>
     * <b>Title：</b> 控制台统一打印方法
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str
     * @author tangxin
     * @date 2016年12月13日 下午6:41:28
     */
    public static void S(String str) {
        System.out.println(str);
    }

    /**
     * <p>
     * <b>Title：</b> SD卡状态校验
     * </p>
     * <p>
     * <b>Description：</b>获取SD卡是否可用
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:41:36
     */
    public static boolean isSdk() {
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    }

    /**
     * <p>
     * <b>Title：</b> 彻底关闭app
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param context
     * @author tangxin
     * @date 2016年12月13日 下午6:42:05
     */
    public static void closeAll(Context context) {
        System.exit(0);
    }

    /**
     * <p>
     * <b>Title：</b> 回到桌面
     * </p>
     * <p>
     * <b>Description：</b>模拟Home键效果，回到桌面
     * </p>
     *
     * @param context
     * @author tangxin
     * @date 2016年12月13日 下午6:42:12
     */
    public static void home(Context context) {
        Intent intent = new Intent();
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        context.startActivity(intent);
    }

    /**
     * <p>
     * <b>Title：</b> 拨打电话
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param phonenumber
     * @param customerId
     * @author tangxin
     * @date 2016年12月13日 下午6:42:28
     */
    public static void callPhone(String phonenumber, String customerId) {
        callPhoneToSelect(phonenumber, customerId);
    }

    /**
     * <p>
     * <b>Title：</b> 跳转到电话拨打界面
     * </p>
     * <p>
     * <b>Description：</b> 如果未开通电话平台，在新的界面会调用本地拨号
     * </p>
     *
     * @param s
     * @param customerId
     * @author tangxin
     * @date 2016年12月13日 下午6:42:41
     */
    public static void callPhoneToSelect(String s, String customerId) {
        Intent intent = new Intent(context, SelectPhoneActivity.class);
        intent.putExtra("phonenumber", s);
        intent.putExtra("customerId", customerId);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    /**
     * <p>
     * <b>Title：</b> 发送短信
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param list_tel
     * @author tangxin
     * @date 2016年12月13日 下午6:43:20
     */
    public static void sendMMS(List<String> list_tel) {
        String mobile = "";
        for (int i = 0; i < list_tel.size(); i++) {
            if (i == (list_tel.size() - 1)) {
                mobile += list_tel.get(i);
            } else {
                mobile += list_tel.get(i) + ";";
            }
        }
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.putExtra("address", mobile);
        intent.setType("vnd.android-dir/mms-sms");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    /**
     * <p>
     * <b>Title：</b> 存UserName
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param PwdStr
     * @author tangxin
     * @date 2016年12月13日 下午6:43:41
     */
    public static void setUserName(String PwdStr) {
        setJsonArray(UserName, PwdStr);
    }

    /**
     * <p>
     * <b>Title：</b> 获取UserName
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:43:49
     */
    public static String getUserName() {
        return aCache.getAsString(UserName);
    }

    /**
     * <p>
     * <b>Title：</b> 存项目ID
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param PwdStr
     * @author tangxin
     * @date 2016年12月13日 下午6:43:57
     */
    public static void setProjectID(String PwdStr) {
        setJsonArray(Project_ID, PwdStr);
    }

    /**
     * <p>
     * <b>Title：</b> 获取项目ID
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:44:03
     */
    public static String getProjectID() {
        return aCache.getAsString(Project_ID);
    }

    /**
     * <p>
     * <b>Title：</b> 存项目Code
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param PwdStr
     * @author tangxin
     * @date 2016年12月13日 下午6:44:10
     */
    public static void setProjectCode(String PwdStr) {
        setJsonArray(ProjectCode, PwdStr);
    }

    /**
     * <p>
     * <b>Title：</b> 获取项目Code
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:44:18
     */
    public static String getProjectCode() {
        return aCache.getAsString(ProjectCode);
    }

    /**
     * <p>
     * <b>Title：</b> 存登陆标识
     * </p>
     * <p>
     * <b>Description：</b>已登录(1)或未登录(2)
     * </p>
     *
     * @param PwdStr
     * @author tangxin
     * @date 2016年12月13日 下午6:44:30
     */
    public static void setIsLogin(String PwdStr) {
        setJsonArray(PWDSTR, PwdStr);
    }

    /**
     * <p>
     * <b>Title：</b> 获取登陆标识
     * </p>
     * <p>
     * <b>Description：</b>【已登录(1)未登录(2)】
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:44:40
     */
    public static String getIsLogin() {
        return aCache.getAsString(PWDSTR);
    }

    /**
     * <p>
     * <b>Title：</b> 存登陆token
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param token
     * @author tangxin
     * @date 2016年12月13日 下午6:44:53
     */
    public static void setIsLoginToken(String token) {
        setJsonArray(LoginToken, token);
    }

    /**
     * <p>
     * <b>Title：</b> 获取登陆token
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:45:00
     */
    public static String getToken() {
        return aCache.getAsString(LoginToken);
    }

    /**
     * <p>
     * <b>Title：</b> 存登陆 userId
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param token
     * @author tangxin
     * @date 2016年12月13日 下午6:45:07
     */
    public static void setIsLoginUserId(String token) {
        setJsonArray(USERID, token);
    }

    /**
     * <p>
     * <b>Title：</b> 获取登陆userId
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:45:14
     */
    public static String getUserId() {
        return aCache.getAsString(USERID);
    }

    /**
     * <p>
     * <b>Title：</b> 存
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param name
     * @param PwdStr
     * @author tangxin
     * @date 2016年12月13日 下午6:46:09
     */
    public static void setData(String name, String PwdStr) {
        setJsonArray(name, PwdStr);
    }

    /**
     * 是否需要提示（绿城校验提示） true需要  false不需要
     */
    public static boolean isTips() {
        return "1".equals(getData("isTips"));
    }

    /**
     * @param str 1需要  0不需要
     */
    public static void setTips(String str) {
        setData("isTips", str);
    }

    /**
     * <p>
     * <b>Title：</b> 取
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param name 需要取值的Key
     * @return Key对应的value
     * @author tangxin
     * @date 2016年12月13日 下午6:46:14
     */
    public static String getData(String name) {
        return aCache.getAsString(name);
    }

    /**
     * <p>
     * <b>Title：</b> 获取手机当前时间
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:46:20
     */
    public static String geTimes() {
        return System.currentTimeMillis() + "";
    }

    /**
     * <p>
     * <b>Title：</b> 获取手机当前时间
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:46:26
     */
    public static long geTime() {
        return System.currentTimeMillis();
    }

    /**
     * <p>
     * <b>Title：</b> 手机号码校验
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param mobiles
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:46:32
     */
    public static boolean isMobileNO(String mobiles) {
        /*
         * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
		 * 联通：130、131、132、152、155、156、185、186 \ 电信：133、153、180、189、（1349卫通）
		 * 总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
		 */
        String telRegex = "[1][34578]\\d{9}";// "[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        if (TextUtils.isEmpty(mobiles))
            return false;
        else
            return mobiles.matches(telRegex);
    }

    /**
     * 错误提示
     */
    public static final String TOAST_STR = "projectCode不可为空";

    /**
     * <p>
     * <b>Title：</b> 自定义Toast
     * </p>
     * <p>
     * <b>Description：</b> showToast(上下文，提示内容，提示时间)
     * </p>
     *
     * @param content
     * @author tangxin
     * @date 2016年12月13日 下午6:46:57
     */
    public static void T(String content) {
        CustomToast.showToast(context, content, ToastTime);
    }

    public static void T() {
        CustomToast.showToast(context, "该用户暂无项目数据权限，请联系管理员", 3000);
    }

    public static void Ts(String content2) {
        CustomToast.showToast(context, content2, 2000);
    }

    public static void T2(String content) {
        CustomToast.showToast(context, content, 3000);
    }

    /**
     * <p>
     * <b>Title：</b> 时间格式化
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param s
     * @param style
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:47:13
     */
    public static String timeDate(String s, String style) {
        Date date = new Date(s);
        SimpleDateFormat format = new SimpleDateFormat(style);// "yyyy-MM-dd
        // HH:mm:ss "
        String time = format.format(date);
        return time;
    }

    /**
     * <p>
     * <b>Title：</b> 时间格式化
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param time
     * @param style
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:47:13
     */
    public static String dataTime(long time, String style) {
        SimpleDateFormat formatter = new SimpleDateFormat(style);
        Date curDate = new Date(time);
        String str = formatter.format(curDate);
        return str;
    }

    /**
     * <p>
     * <b>Title：</b> 获取当月的 天数
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:47:30
     */
    public static int getCurrentMonthDay() {
        Calendar a = Calendar.getInstance();
        a.set(Calendar.DATE, 1);
        a.roll(Calendar.DATE, -1);
        int maxDate = a.get(Calendar.DATE);
        return maxDate;
    }

    /**
     * <p>
     * <b>Title：</b> 根据年 月 获取对应的月份 天数
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param year
     * @param month
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:47:35
     */
    public static int getDaysByYearMonth(int year, int month) {
        Calendar a = Calendar.getInstance();
        a.set(Calendar.YEAR, year);
        a.set(Calendar.MONTH, month - 1);
        a.set(Calendar.DATE, 1);
        a.roll(Calendar.DATE, -1);
        int maxDate = a.get(Calendar.DATE);
        return maxDate;
    }

    /**
     * <p>
     * <b>Title：</b> 恢复屏幕亮度
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param activity
     * @author tangxin
     * @date 2016年12月13日 下午6:47:41
     */
    public static void setLog(Activity activity) {
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.alpha = 1f;
        activity.getWindow().setAttributes(lp);
    }

    /**
     * <p>
     * <b>Title：</b> 设置屏幕亮度
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param activity
     * @param str
     * @author tangxin
     * @date 2016年12月13日 下午6:47:46
     */
    public static void setNumberLog(Activity activity, float str) {
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.alpha = str;
        activity.getWindow().setAttributes(lp);
    }

    /**
     * <p>
     * <b>Title：</b> 取出百分号%
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:47:57
     */
    public static String removed(String str) {
        if (str == null) {
            return null;
        }
        str = replace("%", "", str);
        return str;
    }

    /**
     * <p>
     * <b>Title：</b>取出元
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:48:02
     */
    public static String removeWYuan(String str) {
        if (str == null) {
            return null;
        }
        str = replace("万元", "万", str);
        return str;
    }

    /**
     * <p>
     * <b>Title：</b> 取出 元
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:48:07
     */
    public static String removeY(String str) {
        if (str == null) {
            return null;
        }
        str = replace("元", "", str);
        return str;
    }

    /**
     * <p>
     * <b>Title：</b> 取出 成 字
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:48:12
     */
    public static String removeFirst(String str) {
        if (str == null) {
            return null;
        }
        str = replace("成", "", str);
        return str;
    }

    /**
     * <p>
     * <b>Title：</b> 将年月日改变成--
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:48:20
     */
    public static String replaceTime(String str) {
        if (str == null) {
            return null;
        }
        str = replace("年", "-", str);
        str = replace("月", "-", str);
        str = replace("日", "", str);
        return str;
    }

    /**
     * <p>
     * <b>Title：</b> 将年月日改变成--
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param str
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:48:20
     */
    public static String replaceTimeDay(String str) {
        if (str == null) {
            return null;
        }
        str = replace("年", "-", str);
        str = replace("月", "", str);
        str = replace("日", "", str);
        return str;
    }

    /**
     * <p>
     * <b>Title：</b> replace
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param from
     * @param to
     * @param source
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:48:26
     */
    public static String replace(String from, String to, String source) {
        if (source == null || from == null || to == null)
            return null;
        StringBuffer bf = new StringBuffer("");
        int index = -1;
        while ((index = source.indexOf(from)) != -1) {
            bf.append(source.substring(0, index) + to);
            source = source.substring(index + from.length());
            index = source.indexOf(from);
        }
        bf.append(source);
        return bf.toString();
    }

    /**
     * <p>
     * <b>Title：</b> 金额格式化
     * </p>
     * <p>
     * <b>Description：</b>小数点后可以不存在
     * </p>
     *
     * @param number
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:48:34
     */
    public static String drop2(String number) {
        if (!EmmApplication.isNull(number)) {
            number = "0";
        }
        DecimalFormat df = new DecimalFormat("0.##");
        return getNumber(number, df);
    }

    /**
     * <p>
     * <b>Title：</b> 金额格式化
     * </p>
     * <p>
     * <b>Description：</b>小数点后不存在默认为0
     * </p>
     *
     * @param number
     * @return
     * @author tangxin
     * @date 2016年12月13日 下午6:48:34
     */
    public static String drop3(String number) {
        DecimalFormat df = new DecimalFormat("0.00");
        return getNumber(number, df);
    }

    /**
     * 取整数
     */
    public static String drop4(String number) {
        DecimalFormat df = new DecimalFormat("0");
        df.setRoundingMode(RoundingMode.HALF_UP);// 向上取、向下取
        return getNumber(number, df);
    }

    public static String getNumber(String number, DecimalFormat df) {
        try {
            String a = TextUtils.isEmpty(number) == true ? "0" : number;
            double b = Double.valueOf(a);
            return df.format(b);
        } catch (NumberFormatException e2) {
            return df.format(Double.valueOf(TextUtils.isEmpty(number) == true ? "0" : number).doubleValue());
        } catch (Exception e) {
            return df.format(Double.valueOf(TextUtils.isEmpty(number) == true ? "0" : number).doubleValue());
        }
    }

    /**
     * <p>
     * <b>Title：</b> 跳转动画
     * </p>
     * <p>
     * <b>Description：</b>效果：从右往左推动
     * </p>
     *
     * @param activity
     * @author tangxin
     * @date 2016年12月14日 上午9:33:27
     */
    public static void startIntentAnim(Activity activity) {
        activity.overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
    }

    /**
     * <p>
     * <b>Title：</b> 跳转动画
     * </p>
     * <p>
     * <b>Description：</b>效果：渐变
     * </p>
     *
     * @param activity
     * @author tangxin
     * @date 2016年12月14日 上午9:33:56
     */
    public static void startIntentAnim2(Activity activity) {
        activity.overridePendingTransition(R.anim.fade, R.anim.hold);
    }

    /**
     * <p>
     * <b>Title：</b> 跳转动画
     * </p>
     * <p>
     * <b>Description：</b>效果：渐变
     * </p>
     *
     * @param activity
     * @author tangxin
     * @date 2016年12月14日 上午9:34:07
     */
    public static void startIntentAnim2S(Activity activity) {
        activity.overridePendingTransition(R.anim.hold_1, R.anim.fade_1);
    }

    /**
     * <p>
     * <b>Title：</b>跳转动画
     * </p>
     * <p>
     * <b>Description：</b> 效果：从上往下
     * </p>
     *
     * @param activity
     * @author tangxin
     * @date 2016年12月14日 上午9:34:30
     */
    public static void startIntentAnim3(Activity activity) {
        activity.overridePendingTransition(R.anim.push_up_out_1, R.anim.push_up_in_1);
    }

    /**
     * <p>
     * <b>Title：</b> 跳转动画
     * </p>
     * <p>
     * <b>Description：</b>效果：从下往上
     * </p>
     *
     * @param activity
     * @author tangxin
     * @date 2016年12月14日 上午9:34:50
     */
    public static void startIntentAnim4(Activity activity) {
        activity.overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
    }

    /**
     * <p>
     * <b>Title：</b> 获取文件路径
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @author tangxin
     * @date 2016年12月14日 上午9:35:09
     */
    public static void getFileDir() {
        if (isSdk()) {
            dir = Environment.getExternalStorageDirectory();
        } else {
            EmmApplication.T("SD卡不可用或不存在");
            dir = context.getCacheDir();
        }
    }

    /**
     * <p>
     * <b>Title：</b> 获取DatePatch路径
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月14日 上午9:35:28
     */
    public static String getDatePatch() {
        if (isSdk()) {
            dir = Environment.getExternalStorageDirectory();
        } else {
            EmmApplication.T("SD卡不可用或不存在");
            dir = context.getCacheDir();
        }
        return dir.getPath() + "/xinfang";
    }

    @SuppressLint("SdCardPath")
    public static void saveMyBitmap(String bitName, Bitmap mBitmap, Context context) throws IOException {
        getFileDir();
        try {
            path = getDatePatch();
            File destDir = new File(path);
            if (!destDir.exists()) {
                destDir.mkdir();
            }
            File f = new File(path + bitName + ".png");
            EmmApplication.setData("uri_byte", path + bitName + ".png");
            f.createNewFile();
            FileOutputStream fOut = null;
            try {
                fOut = new FileOutputStream(f);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
            try {
                fOut.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fOut.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            Log.w(TAG, "EmmApplication saveMyBitmap-->" + e.getMessage());
        }
    }

    /**
     * <p>
     * <b>Title：</b> 压缩方法
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param path
     * @return
     * @author tangxin
     * @date 2016年12月7日 下午3:56:05
     */
    public static String setPatchRtString(String path) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        // 获取这个图片的宽和高
        Bitmap bitmap = BitmapFactory.decodeFile(path, options); // 此时返回bm为空

        options.inJustDecodeBounds = false;
        // 计算缩放比
        int be = (int) (options.outHeight / (float) EmmApplication.BitmapSize);
        if (be <= 0)
            be = 1;
        options.inSampleSize = be;
        // 重新读入图片，注意这次要把options.inJustDecodeBounds 设为 false
        bitmap = BitmapFactory.decodeFile(path, options);

        // 矫正图片的方向
        bitmap = BitmapDegreeTools.rotateBitmapByDegree(bitmap, BitmapDegreeTools.getBitmapDegree(path));

        int w = bitmap.getWidth();
        int h = bitmap.getHeight();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
        byte[] datas = baos.toByteArray();
        try {
            baos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] encode = Base64.encode(datas, Base64.DEFAULT);
        String photo2 = new String(encode);
        return photo2;
    }

    /**
     * <p>
     * <b>Title：</b> 获取手机和apk相关信息
     * </p>
     * <p>
     * <b>Description：</b> <br>
     * 1：为当前应用的版本号 （如 1 2 3 ..） <br>
     * 2：设备号 <br>
     * 3：Android系统版本号 <br>
     * 4: deviceID<br>
     * 5: APK版本号<br>
     * 9：APK版本名称 （如 2.1 2.2 ）<btr>
     * </p>
     *
     * @param number
     * @return
     * @author tangxin
     * @date 2016年12月14日 上午9:37:59
     */
    public static String getPackageManager(int number) {
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            // 当前应用的版本名称
            versionName = info.versionName;
            // 当前版本的版本号
            versionCode = info.versionCode;
            // 得到应用程序安装时间
            File file = new File(info.applicationInfo.sourceDir);
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
            install_time = formatter.format(new Date(file.lastModified()));
            // makeToast(install_time);
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        deviceId = tm.getDeviceId();
        if (TextUtils.isEmpty(deviceId)) {
            deviceId = Installation.UUID_id(context);
        } else {
        }
        currentapiVersion = android.os.Build.VERSION.RELEASE;// Android系统版本号
        Equipment_number = deviceId + "|" + 1 + "|" + currentapiVersion + "|" + install_time;
        if (number == 1) {
            return String.valueOf(versionCode);
        } else if (number == 2) {
            return Equipment_number;
        } else if (number == 3) {
            return currentapiVersion;
        } else if (number == 4) {
            return deviceId;
        } else if (number == 9) {
            return String.valueOf(versionName);
        } else if (number == 5) {
            return "" + versionCode;
        }
        return null;

    }

    /**
     * 从asset路径下读取对应文件转String输出
     *
     * @param mContext
     * @return
     */
    public static String getJson(Context mContext, String fileName) {
        StringBuilder sb = new StringBuilder();
        AssetManager am = mContext.getAssets();
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    am.open(fileName)));
            String next = "";
            while (null != (next = br.readLine())) {
                sb.append(next);
            }
        } catch (IOException e) {
            e.printStackTrace();
            sb.delete(0, sb.length());
        }
        return sb.toString().trim();
    }

    /**
     * <p>
     * <b>Title：</b> 从文件中读取地址数据
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param c
     * @author tangxin
     * @date 2016年12月14日 上午9:38:58
     */
    public static void initJsonData(Context c) {
        String str = getJson(c, "newgetProvinceCity.json");
        JSONObject jsonObj = JSONObject.parseObject(str);
        JSONObject getResData = JSONObject.parseObject(jsonObj.getString("resData"));
        if (getResData == null) {
            return;
        }
        City_provinceCityDistrict mInfo = JSONObject.parseObject(getResData.toJSONString(),
                City_provinceCityDistrict.class);
        if (mInfo.getResult().equals("1")) {
            city_provinceCityDistricts = mInfo.getProvinceCityDistrict();
            for (int i = 0; i < city_provinceCityDistricts.size(); i++) {
                if (city_provinceCityDistricts.get(i).getCities().size() <= 0) {
                    city_provinceCityDistricts.remove(i);
                    i--;
                }
            }
            for (int k = 0; k < city_provinceCityDistricts.size(); k++) {
                if (null != city_provinceCityDistricts.get(k).getCities()
                        && city_provinceCityDistricts.get(k).getCities().size() > 0) {
                    for (int j = 0; j < city_provinceCityDistricts.get(k).getCities().size(); j++) {
                        if (city_provinceCityDistricts.get(k).getCities().get(j).getDistricts().size() <= 0) {
                            city_provinceCityDistricts.get(k).getCities().remove(j);
                            for (int i = 0; i < city_provinceCityDistricts.size(); i++) {
                                if (city_provinceCityDistricts.get(i).getCities().size() <= 0) {
                                    city_provinceCityDistricts.remove(i);
                                    i--;
                                    k--;
                                }
                            }
                            j--;
                        }
                    }
                }
            }
            for (int i = 0; i < city_provinceCityDistricts.size(); i++) {
                if ("上海市".equals(city_provinceCityDistricts.get(i).getProvince())
                        || "上海".equals(city_provinceCityDistricts.get(i).getProvince())) {
                    ArrayList<City_provinceCityDistrict.ProvinceCityDistrict> city = new ArrayList<City_provinceCityDistrict.ProvinceCityDistrict>();
                    city.add(city_provinceCityDistricts.get(i));
                    city_provinceCityDistricts.addAll(0, city);
                    city_provinceCityDistricts.remove(i + 1);
                    break;
                }
            }
        }
        for (int i = 0; i < city_provinceCityDistricts.size(); i++) {
            for (int o = 0; o < city_provinceCityDistricts.get(i).getCities().size(); o++) {
                for (int u = 0; u < addressList2.size(); u++) {
                    if (addressList2.get(u).getCityId()
                            .equals(city_provinceCityDistricts.get(i).getCities().get(o).getCityId())) {
                        city_provinceCityDistricts.get(i).getCities().get(o).setCity(addressList2.get(u).getCity());
                    }
                }
                for (int p = 0; p < city_provinceCityDistricts.get(i).getCities().get(o).getDistricts().size(); p++) {
                    for (int y = 0; y < addressList.size(); y++) {
                        if (addressList
                                .get(y)
                                .getDistrictId()
                                .equals(city_provinceCityDistricts.get(i).getCities().get(o).getDistricts().get(p)
                                        .getDistrictId())) {
                            city_provinceCityDistricts.get(i).getCities().get(o).getDistricts().get(p)
                                    .setDistrict(addressList.get(y).getDistrict());
                        }
                    }
                }
            }
        }
    }

    public class addressInfo {
        private String district;
        private String districtId;

        public String getDistrict() {
            return district;
        }

        public void setDistrict(String district) {
            this.district = district;
        }

        public String getDistrictId() {
            return districtId;
        }

        public void setDistrictId(String districtId) {
            this.districtId = districtId;
        }
    }

    public class addressInfo2 {
        private String cityId;
        private String city;

        public String getCityId() {
            return cityId;
        }

        public void setCityId(String cityId) {
            this.cityId = cityId;
        }

        public String getCity() {
            return city;
        }

        public void setCity(String city) {
            this.city = city;
        }
    }

    static ArrayList<addressInfo> addressList;

    /**
     * <p>
     * <b>Title：</b> 初始化数据
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @author tangxin
     * @date 2016年12月14日 上午9:41:23
     */
    private void getDate() {
        addressList = new ArrayList<>();
        addressList.add(setItemInfo("宣化区", "152"));
        addressList.add(setItemInfo("灵丘县", "239"));
        addressList.add(setItemInfo("河津市", "303"));
        addressList.add(setItemInfo("工农区", "699"));
        addressList.add(setItemInfo("金溪县", "1340"));
        addressList.add(setItemInfo("薛城区", "1393"));
        addressList.add(setItemInfo("莱城区", "1461"));
        addressList.add(setItemInfo("沙洋县", "1755"));
        addressList.add(setItemInfo("耒阳市", "1847"));
        addressList.add(setItemInfo("化州市", "2019"));
        addressList.add(setItemInfo("玉州区", "2162"));
        addressList.add(setItemInfo("富川瑶族自治县", "2185"));
        addressList.add(setItemInfo("天山区", "3108"));
        addressList.add(setItemInfo("木垒哈萨克自治县", "3136"));
        addressList.add(setItemInfo("市中区", "1392"));
    }

    /**
     * <p>
     * <b>Title：</b> 赋值方法
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param name
     * @param code
     * @return
     * @author tangxin
     * @date 2016年12月14日 上午9:41:45
     */
    private addressInfo setItemInfo(String name, String code) {
        addressInfo info = new addressInfo();
        info.setDistrict(name);
        info.setDistrictId(code);
        return info;
    }

    static ArrayList<addressInfo2> addressList2;

    /**
     * <p>
     * <b>Title：</b> 初始化数据
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @author tangxin
     * @date 2016年12月14日 上午9:41:23
     */
    private void getDate2() {
        addressList2 = new ArrayList<>();
        addressInfo2 info = new addressInfo2();
        info.setCity("凉山彝族自治州");
        info.setCityId("2464");
        addressList2.add(info);

        addressInfo2 info1 = new addressInfo2();
        info1.setCity("常德市");
        info1.setCityId("1872");
        addressList2.add(info1);

        addressInfo2 info2 = new addressInfo2();
        info2.setCity("阜新市");
        info2.setCityId("536");
        addressList2.add(info2);
    }

    /**
     * <p>
     * <b>Title：</b> 转出路径
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param filePath
     * @param fileName
     * @return
     * @author tangxin
     * @date 2016年12月14日 上午9:42:05
     */
    public static File getFilePath(String filePath, String fileName) {
        File file = null;
        makeRootDirectory(filePath);
        try {
            file = new File(filePath + fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return file;
    }

    /**
     * <p>
     * <b>Title：</b> 路径校验（新建）
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param filePath
     * @author tangxin
     * @date 2016年12月14日 上午9:42:19
     */
    public static void makeRootDirectory(String filePath) {
        File file = null;
        try {
            file = new File(filePath);
            if (!file.exists()) {
                file.mkdir();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * <p>
     * <b>Title：</b> 隐藏输入框
     * </p>
     * <p>
     * <b>Description：</b>
     * </p>
     *
     * @param a
     * @author tangxin
     * @date 2016年12月14日 上午9:39:18
     */
    public static void disKey(Activity a) {
        try {
            ((InputMethodManager) a.getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(a.getCurrentFocus()
                    .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        } catch (NullPointerException e) {
        }
    }

    /**
     * <p>
     * <b>Title：</b> 获取拼接的 DeviceId
     * </p>
     * <p>
     * <b>Description：</b>可以防止DeviceId为空，无法作为标识值的情况
     * </p>
     *
     * @return
     * @author tangxin
     * @date 2016年12月14日 上午9:39:25
     */
    private String getDeviceId() {
        final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
        final String tmDevice, tmSerial, tmPhone, androidId;
        tmDevice = "" + tm.getDeviceId();
        tmSerial = "" + tm.getSimSerialNumber();
        androidId = ""
                + android.provider.Settings.Secure.getString(getContentResolver(),
                android.provider.Settings.Secure.ANDROID_ID);
        UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());
        String deviceId = deviceUuid.toString();
        Log.v(TAG, "tmDevice=:" + tmDevice + "--------tmSerial=:" + tmSerial + "----------androidId=:" + androidId
                + "-----------deviceId=:" + deviceId);
        return deviceId;
    }

    // 获取栈顶Activity及其所属进程
    public static Map<String, String> getTopActivityNameAndProcessName(Context context) {
        String processName = null;
        String topActivityName = null;
        ActivityManager activityManager = (ActivityManager) (context
                .getSystemService(android.content.Context.ACTIVITY_SERVICE));
        List<RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1);
        if (runningTaskInfos != null) {
            ComponentName f = runningTaskInfos.get(0).topActivity;
            String topActivityClassName = f.getClassName();
            String temp[] = topActivityClassName.split("//.");
            // 栈顶Activity的名称
            topActivityName = temp[temp.length - 1];
            int index = topActivityClassName.lastIndexOf(".");
            // 栈顶Activity所属进程的名称
            processName = topActivityClassName.substring(0, index);
            System.out.println("---->topActivityName=" + topActivityName + ",processName=" + processName);
        }
        Map<String, String> map = new HashMap<String, String>();
        map.put("processName", processName);
        map.put("topActivityName", topActivityName);
        return map;
    }

    /**
     * <p>
     * <b>Title：</b> 判断当前界面是否存在
     * </p>
     * <p>
     * <b>Description：</b><br>
     * true 存在 <br>
     * false不存在
     * </p>
     *
     * @param a
     * @param activityName
     * @return
     * @author tangxin
     * @date 2017年2月23日 下午2:25:14
     */
    public static boolean getIsVisibleActivity(Activity a, String activityName) {
        Intent intent = new Intent();
        intent.setClassName(a.getPackageName(), activityName);
        ResolveInfo resolveInfo = a.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
        if (resolveInfo != null) {
            return true;
        } else {
            return false;
        }
    }

}
